package com.kaifamiao.jdbc.features;

import java.sql.*;
import java.util.Arrays;

public class SendBatch2 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 为 MySQL 设置参数
        String params = "?serverTimezone=Asia/Chongqing&useServerPrepStmts=true&cachePrepStmts=true";
        String driverClassName = "com.mysql.cj.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/kaifamiao" + params;
        String username = "kfm";
        String password = "kfm";

        /*
        String driverClassName = "oracle.jdbc.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:kaifamiao";
        String username = "kaifamiao";
        String password = "kaifamiao";
        */
        Class.forName( driverClassName );
        Connection conn = DriverManager.getConnection( url, username, password );

        String sql = "INSERT INTO t_pandas (name, id) VALUES ( ?, ? )";
        // "预编译"
        // 1、将带有SQL参数占位符的语句发送给数据库服务器 (数据库服务器接收到SQL语句后会将其解析并编译)
        // 2、接收由数据库服务器返回的 标识符 并创建与之对应的 PreparedStatement对象
        PreparedStatement ps = conn.prepareStatement( sql );

        ps.setString( 1, "大美" );
        ps.setInt( 2 , 4001 );
        ps.addBatch();

        ps.setString( 1, "小美" );
        ps.setInt( 2 , 4002 );
        ps.addBatch();

        ps.setString( 1, "美美" );
        ps.setInt( 2 , 4003 );
        ps.addBatch();

        // 以下操作 MySQL 8.0.25 支持、Oracle 11.2.0.4 不支持
        // ps.addBatch( "DELETE FROM t_pandas WHERE name LIKE '小%'" );

        // 批量"执行"SQL语句
        // 1、发送 标识符 和 一批参数占位符的值 给数据库服务器 (数据库服务器根据占位符和参数值执行SQL)
        // 2、接收 由数据库服务器 返回的执行结果
        int[] counts = ps.executeBatch();
        System.out.println( Arrays.toString( counts ) );

        ps.close();
        conn.close();
    }
}
